package com.cool.shark.service.Impl;

import com.cool.shark.ex.ServiceException;
import com.cool.shark.mapper.CarouselMapper;
import com.cool.shark.pojo.dto.CarouselDTO;
import com.cool.shark.pojo.entity.Carousel;
import com.cool.shark.pojo.vo.CarouselVO;
import com.cool.shark.service.CarouselService;
import com.cool.shark.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * @Name: CarouselServiceImpl
 * @Author: 西风残叶
 * @Date: 2024/4/15 13:55
 * @Version: 1.0
 * @TODO: TODO
 */
@Service
@Slf4j
public class CarouselServiceImpl implements CarouselService {
    @Autowired
    private CarouselMapper mapper;

    /**
     * 插入一个指定名称的记录。
     *
     * @param name 要插入的记录的名称。
     *             该方法没有返回值，它主要用于将一个名为name的记录插入到某个数据结构中。
     */
    @Override
    public void insert(String name) {
        log.info("开始处理添加类别业务,参数为: {}", name);
        if (name == null || name.isEmpty()) {
            String message = "添加类别失败,参数为空";
            throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
        }
        Carousel select = mapper.select(name);
        if (select != null) {
            String message = "添加类别失败,类别已存在";
            throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
        }
        int insert = mapper.insert(name);
        if (insert != 1) {
            String message = "添加类别失败,服务器内部错误";
            throw new ServiceException(ServiceCode.ERR_INTERNAL_SERVER, message);
        }
        log.info("添加类别成功");
    }

    /**
     * 获取类别列表
     *
     * @return List<CarouselVO> 类别列表，返回一个包含多个类别信息的列表对象
     */
    @Override
    public List<CarouselVO> list() {
        log.info("开始处理获取类别列表业务");
        List<CarouselVO> list = mapper.list();
        return list;
    }

    /**
     * 删除指定ID的记录。
     *
     * @param id 要删除的记录的唯一标识符。
     * @return 无返回值。
     */
    @Override
    public void delete(int id) {
        log.info("开始处理删除类别业务,参数为: {}", id);
        int i = mapper.selectById(id);
        if (i == 0) {
            String message = "删除类别失败,类别不存在";
            throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
        }
        int delete = mapper.delete(id);
        if (delete != 1) {
            String message = "删除类别失败,服务器内部错误";
            throw new ServiceException(ServiceCode.ERR_INTERNAL_SERVER, message);
        }
        log.info("删除类别成功");
    }

    /**
     * 更新轮播信息。
     *
     * @param carouselDTO 轮播数据传输对象，包含需要更新的轮播信息。
     *                    通过该对象，可以更新轮播图的各个属性，如图片链接、展示文本等。
     * @return 无返回值。
     */
    @Override
    public void update(CarouselDTO carouselDTO) {
        log.info("开始处理更新类别业务,参数为: {}", carouselDTO);
        Carousel select = mapper.select(carouselDTO.getName());
        if (select != null) {
            String message = "更新类别失败,类别已存在,请修改分类!";
            throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
        }
        int update = mapper.update(carouselDTO);
        if (update!=1){
            String message = "更新类别失败,服务器内部错误";
            throw new ServiceException(ServiceCode.ERR_INTERNAL_SERVER, message);
        }
        log.info("更新类别成功");
    }
}
